#!/usr/bin/env python3
"""
演示tree日志功能的不同配置选项
"""

import sys
import os
import logging
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from src.index_tree import IndexTree

# 配置测试用的logger
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(name)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)
test_logger = logging.getLogger("tree_config_demo")


def demo_token_display_length():
    """演示不同的token显示长度配置"""
    test_logger.info("=== 演示token显示长度配置 ===")
    
    # 创建一个tree用于测试
    tree = IndexTree(block_size=4)
    
    test_logger.info("1. 默认配置 (显示前5个token):")
    tree.insert_node([1, 2, 3, 4], None, 2001)
    tree.insert_node([101, 102, 103, 104, 105, 106, 107, 108, 109, 110], 2001, 2002)
    
    test_logger.info("2. 测试不同长度的token:")
    tree.insert_node([201, 202], 2001, 2003)  # 短token
    tree.insert_node([301, 302, 303, 304, 305], 2001, 2004)  # 正好5个
    tree.insert_node([401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412], 2001, 2005)  # 长token
    
    test_logger.info("=== 演示完成 ===")


def demo_tree_depth_limit():
    """演示树深度限制"""
    test_logger.info("=== 演示树深度限制 ===")
    
    tree = IndexTree(block_size=4)
    
    # 创建一个深度较大的树
    test_logger.info("创建深度较大的树结构:")
    tree.insert_node([1, 2, 3, 4], None, 3001)
    tree.insert_node([5, 6, 7, 8], 3001, 3002)
    tree.insert_node([9, 10, 11, 12], 3002, 3003)
    tree.insert_node([13, 14, 15, 16], 3003, 3004)
    tree.insert_node([17, 18, 19, 20], 3004, 3005)
    tree.insert_node([21, 22, 23, 24], 3005, 3006)
    tree.insert_node([25, 26, 27, 28], 3006, 3007)
    tree.insert_node([29, 30, 31, 32], 3007, 3008)
    tree.insert_node([33, 34, 35, 36], 3008, 3009)
    tree.insert_node([37, 38, 39, 40], 3009, 3010)
    tree.insert_node([41, 42, 43, 44], 3010, 3011)  # 这个应该会触发深度限制
    
    test_logger.info("=== 深度限制演示完成 ===")


def demo_wide_tree():
    """演示宽树结构（多个兄弟节点）"""
    test_logger.info("=== 演示宽树结构 ===")
    
    tree = IndexTree(block_size=4)
    
    test_logger.info("创建宽树结构（多个兄弟节点）:")
    tree.insert_node([1, 2, 3, 4], None, 4001)
    
    # 添加多个子节点
    for i in range(8):
        start_token = 10 + i * 4
        tokens = [start_token, start_token + 1, start_token + 2, start_token + 3]
        tree.insert_node(tokens, 4001, 4010 + i)
    
    # 为某些子节点添加孙子节点
    tree.insert_node([100, 101, 102, 103], 4012, 4020)
    tree.insert_node([200, 201, 202, 203], 4015, 4021)
    
    test_logger.info("=== 宽树结构演示完成 ===")


if __name__ == "__main__":
    test_logger.warning("=== 请将 Cache Indexer 的日志级别设置为 DEBUG 后运行 ===")

    demo_token_display_length()
    demo_tree_depth_limit()
    demo_wide_tree()
    
    test_logger.info("=== 所有演示完成 ===")
    test_logger.info("配置说明:")
    test_logger.info("- token_display_length: 控制显示的token数量，默认5个，-1表示全部显示")
    test_logger.info("- max_depth: 控制树的最大显示深度，默认10层")
    test_logger.info("- max_nodes: 控制最大显示节点数，默认50个")
    test_logger.info("- show_hashes: 控制是否显示哈希值，默认true")
    test_logger.info("- enabled: 控制是否启用tree调试，默认true")
    test_logger.info("这些配置可以在 config/application.yaml 中修改")